package com.hedl.practice.diyJava.regexs.study_complex_matching_rules.test;

public class Main {
    static String re1 = "^A\\d{3}$";

    static String re2 = "[0-9a-fA-F]{6}";
    static String re3 = "[1-9]\\d{6,7}";        //只能7位，6位会报错

    static String re4 = "[^1-9]{3}";        //排除法

    static String re5 = "java|go|php|c";
    static String re6 = "name\\s(java|php|hello|CH)";

    public static void main(String[] args) {
        /**
         * 用^表示开头，$表示结尾。例如，^A\d{3}$
         */
        System.out.println("===================匹配开头和结尾===============");
        System.out.println("A001".matches(re1));    //true
        System.out.println("A380".matches(re1));
        System.out.println("A3800".matches(re1));       //false

        System.out.println("====================匹配指定范围================");
        /**
         * 要匹配大小写不限的十六进制数，比如1A2b3c，我们可以这样写：[0-9a-fA-F]，它表示一共可以匹配以下任意范围的字符：
         *      0-9：字符0~9；
         *      a-f：字符a~f；
         *      A-F：字符A~F。
         */
        System.out.println("83acAF".matches(re2));      //true
        System.out.println("12AFDE".matches(re2));      //true
        System.out.println("43admc".matches(re2));      //false

        //号码
        System.out.println("123456".matches(re3));      //false
        System.out.println("1234".matches(re3));        //false
        System.out.println("0123456".matches(re3));     //false
        System.out.println("1234567".matches(re3));     //true
        System.out.println("765349".matches(re3));      //false

        System.out.println("============排除法================");
        /**
         * 排除法，即不包含指定范围的字符。假设我们要匹配任意字符，但不包括数字，可以写[^1-9]{3}：
         *      可以匹配"ABC"，因为不包含字符1~9；
         *      可以匹配"A00"，因为不包含字符1~9；
         *      不能匹配"A01"，因为包含字符1；
         *      不能匹配"A05"，因为包含字符5。
         */
        System.out.println("ABD".matches(re4));     //true
        System.out.println("abd".matches(re4));     //true
        System.out.println("ds3".matches(re4));     //false
        System.out.println("MI1".matches(re4));     //false

        System.out.println("=================或规则匹配==============");
        /**
         * 用|连接的两个正则规则是或规则，例如，AB|CD表示可以匹配AB或CD。
         */
        System.out.println("java".matches(re5));        //true
        System.out.println("php".matches(re5));     //false
        System.out.println("go".matches(re5));      //true
        System.out.println("C++".matches(re5));     //false

        System.out.println("===================使用括号===============");
        System.out.println("name java".matches(re6));       //true
        System.out.println("name php".matches(re6));        //true
        System.out.println("name ch".matches(re6));     //false

    }
}
